package com.study.lambda;

/**
 * 推导lambda表达式
 */
public class DeriveLambda {


    /**
     * 3.静态内部类
     */
    static class StaticLike implements ILike {
        @Override
        public void lambda() {
            System.out.println("推导 lambda 表达式 2.0 静态内部类");
        }
    }

    public static void main(String[] args) {
        ILike like = new like();
        like.lambda();
        // 静态内部类
        new StaticLike().lambda();
        /**
         * 4. 局部内部类
         * */
        class PartLike implements ILike {
            @Override
            public void lambda() {
                System.out.println("推导 lambda 表达式 3.0 局部内部类");
            }
        }
        // 局部内部类
        new PartLike().lambda();


        /**
         * 5、 匿名 内部类  没有类的名称必须借助接口和父类
         * */
        like = new ILike() {
            @Override
            public void lambda() {
                System.out.println("推导 lambda 表达式 4.0 匿名内部类");
            }
        };
        like.lambda();

        /**
         * 6、 用Lambda 进行简化
         * */
        like = () -> {
            System.out.println("推导 lambda 表达式 5.0 Lambda 表达式");
        };
        like.lambda();
    }
}


/**
 * 1. 定义一个函数式接口
 */
interface ILike {
    void lambda();
}


/**
 * 2 实现类
 */
class like implements ILike {

    @Override
    public void lambda() {
        System.out.println("推导 lambda 表达式");
    }
}